package juc.atomic;

import java.util.concurrent.atomic.AtomicIntegerFieldUpdater;

/**
 * 1. 想让类的属性操作具备原子性
 * 1.1 volatile
 * 1.2 非private，protected(如果是当前类也可以是private、protected)
 * 1.3 类型必须一致
 * 1.4 其他
 * 2. 不想使用锁(包括显示锁或者重量级锁synchronized)
 * 3. 大量需要原子类型修饰的对象，相比较耗费内存
 *
 */
public class AIFUTest {
    private volatile int i;
    private AtomicIntegerFieldUpdater<AIFUTest> updater = AtomicIntegerFieldUpdater.newUpdater(AIFUTest.class, "i");

    public int get() {
        return i;
    }

    public void update(int newValue) {
        updater.compareAndSet(this, i, newValue);
    }

    public static void main(String[] args) {
        AIFUTest test = new AIFUTest();
        test.update(10);
        System.out.println(test.get());
    }
}
